package com.deluxelx.soul.inn.service.counselor;

import com.baomidou.mybatisplus.extension.service.IService;
import com.deluxelx.soul.inn.bean.counselor.*;
import com.deluxelx.soul.inn.common.param.CollectedParam;

import java.util.List;

/**
 * 咨询师接口类
 *
 * @author: zihao.liao
 * @date: 2024/1/17 14:14
 */
public interface CounselorService extends IService<Counselor> {
    /**
     * 查询首页咨询师列表
     * @return 首页咨询师列表
     */
    List<CounselorVO> fetchIndexCounselorList();
    /**
     * 获取搜索的咨询师列表
     *
     * @param keyword 关键字
     * @return 咨询师列表
     **/
    List<CounselorVO> fetchSearchCounselorList(String keyword);
    /**
     * 查询我关注的咨询师列表
     * @return 我关注的咨询师列表
     */
    List<CounselorFollowVO> fetchMyFollowCounselorList(String userId);
    /**
     * 查询我的咨询
     * @param userId 用户id
     * @param status 咨询状态（0-待咨询 1-已结束）
     * @return 咨询列表
     */
    List<AppointmentVO> fetchMyAppointmentList(String userId, Integer status);
    /**
     * 根据条件筛选获取咨询师列表
     *
     * @param param 咨询师查询条件
     * @return 咨询师列表
     **/
    List<CounselorVO> fetchByCondition(CounselorQueryParam param);
    /**
     * 查询咨询师等级列表
     * @return 等级列表
     */
    List<Grade> fetchGradeList();
    /**
     * 查询咨询师擅长列表
     * @return 擅长列表
     */
    List<Expertise> fetchExpertiseList();
    /**
     * 查询咨询师的详情
     * @param counselorId 咨询师id
     * @param userId 用户id
     * @return 咨询师详情
     */
    CounselorDetailVO fetchCounselorDetail(String counselorId, String userId);
    /**
     * 查询此用户是否收藏了该咨询师
     * @param param 前端传参
     * @return 结果
     */
    Boolean isCollectCounselor(CollectedParam param);
    /**
     * 该用户点击关注咨询师
     * @param param 前端传参
     * @return 结果
     */
    Boolean followCounselor(CollectedParam param);
    /**
     * 该用户点击取消关注咨询师
     * @param param 前端传参
     * @return 结果
     */
    Boolean unFollowCounselor(CollectedParam param);
    /**
     * 该用户是否是咨询师
     * @param userId 用户id
     * @return 结果
     */
    Boolean isCounselor(String userId);
    /**
     * 咨询师资格认证
     *
     * @param param 前端传参
     * @return 结果
     **/
    Boolean certified(CertifiedParam param);

    /**
     * 根据咨询师id获取其日程
     * @param counselorId 咨询师id
     * @return 日程时间列表
     */
    List<ScheduleTime> fetchScheduleById(String counselorId);

    /**
     * 预约咨询
     * @param param 预约参数
     * @return 结果
     */
    Boolean makeAppointment(AppointmentParam param);
}
